Java 使用jacob打印word文档


记录并整理自己网上查阅的资料,网上的代码感觉始终有点不全,一些操作没有完全关闭,比如打开的Word没有关闭,一直占用这系统资源;由于网上很多实例都是讲解打印Excel文档的,微软的MSDN上面的具体的ActiveX部件对象的属性、事件、方法等也是以Excel为例的(https://msdn.microsoft.com/zh-cn/VBA/Excel-VBA/articles/sheets-printout-method-excel

而我这里打印的文件是Word文档,所以在设置打印参数的时候发现没有打印份数这个参数(也可能是我没有深究到),还没有具体的打印完成状态返回,直接发送打印指令过去就完了。

具体操作如下:

  1. 首先将JACOB的DLL拷贝至 C:\Windows\System32 中,然后引入jar包(jacob.jar)到项目中
  2. DCom Server Process Launcher(DcomLaunch)服务需要打开[services.msc]
  3. 需要安装Microsoft office 2003+

具体的实现代码:

/**
 * @param path  文档路径
 * @param copies  打印份数(word的打印这个参数无法设置)
 */
public static void printWord(String path,int copies){
    if(path.isEmpty()||copies<1){
        System.out.println("无文档文件");
        return;
    }
    System.out.println("开始打印");
    ComThread.InitSTA();
    ActiveXComponent word=new ActiveXComponent("Word.Application");//创建 ActiveX部件对象,这里是Word的
    Dispatch doc=null;
    Dispatch.put(word, "Visible", new Variant(false)); Visible是控制文档打开后是可见还是不可见,false:静默打印(不可见)
    Dispatch docs=word.getProperty("Documents").toDispatch();
    doc=Dispatch.call(docs, "Open", path).toDispatch();

    try {
        Dispatch.call(doc, "PrintOut");//打印
        System.out.println("完成打印");
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("打印失败");
    }finally{
        try {
            if(doc!=null){
                Dispatch.call(doc, "Close",new Variant(true));//word文档关闭
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        //退出
        word.invoke("Quit", new Variant[0]);
        //释放资源
        ComThread.Release();
        ComThread.quitMainSTA();
    }
}

一个基本的打印就完成了,直接调用这个方法即可打印Word文档。
附(jar包和dll文件下载,由于csdn已经不能设置免费下载了,所以我就设了最少的一个2积分):http://download.csdn.net/download/qq_26891233/10234805

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值